<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<script>
/* 
    基本类型：有一个值的简单数据段
    基本类型是保存在栈内存中的简单数据段，按值访问

    引用类型：有多个值的复杂数据段
    引用类型是保存在堆内存中的复杂数据段，按引用地址访问

    两个引用类型比较是否相等，比较内存地址

    函数的值传递：实参为基本类型，把值传递到函数内部
    函数的引用传递：实参为引用类型，把引用地址传递到函数内部

    基本包装类型：将基本类型包装成对应的引用类型
    基本包装类型：Number String Boolean
    JS引擎在需要的时候，将基本类型包装成对应的引用类型
    var str = 'hello';
    var letter = str.charAt(1);

    var _str = new String('hello');// 1.包装成对应的引用类型
    var letter = _str.charAt(1);// 2.通过对象调用方法
    _str = null;// 3.销毁临时创建的对象


    正则表达式 也叫 规则表达式
    正则表达式是一种字符串匹配规则，是一种逻辑字符串

    创建正则：
        1.使用构造函数创建正则
        var reg = new RegExp(pattern1,attributes);
        2.使用普通方式创建正则
        var reg = /pattern2/attributes;

        pattern 匹配的字符串规则
        attributes 属性设置
            g 代表全局匹配（继续往后匹配）
            i 代表不区分大小写
            m 代表多行匹配
        
        两种创建正则的区别：pattern1可以是一个变量，pattern2不能是一个变量
    
    正则的索引：
        进行匹配之后，正则对象的lastIndex属性记录了上次匹配结束的索引位置

    元字符：
        \d 匹配一个0-9的数字
        \s 匹配一个空格
        \b 匹配单词边界，不匹配任何具体字符
        \w 匹配 数字、字母、下划线 中的任意一个字符
        . 匹配任意一个字符，除了\n换行符
        \n 匹配一个换行符
        \u 用于匹配中文 [\u4e00-\u9fa5]常用汉字范围
        元字符大写时，代表相反的含义

    中括号：
        [abc] 匹配中括号中任意一个字符
        [^abc] 匹配非中括号中任意一个字符
        [0-9] 匹配任意一个数字
        [a-z] 匹配任意一个小写字母
        [A-Z] 匹配任意一个大写字母
        [\u4e00-\u9fa5] 匹配任意一个汉字
    
    量词：
        + 匹配一个或多个字符 {1,}
        ? 匹配0个或1个字符 {0,1}
        * 匹配任意多个字符 {0,}
        {2,5} 匹配2-5个连续的字符
        {2,} 匹配至少2个连续的字符
        {3} 匹配3个连续的字符
    
    其他字符：
        ^ 匹配以某个字符开头
        $ 匹配以某个字符结尾
        | 逻辑或，匹配左边或右边
        \ 转义符（要匹配的字符有特殊含义，要匹配字符本身时，需要转义）
        需要转义的字符：\ . + ? * ^ $ [] () {} |
    
    正则分组：
        在定义匹配规则时，可以使用()将匹配内容进行分组
        在执行匹配之后，分组内容会被自动保存下来
        可以使用 RegExp.$1 $2 $3 ... 访问到分组匹配的内容
    
    正则对象的方法：
        reg.test(str) 使用reg规则去匹配str字符串，返回布尔值
        reg.exec(str) 使用reg规则去匹配str字符串，返回第一个匹配结果的数组
        reg.compile(pattern,attributes) 重新编辑正则
        
    字符串的方法：
        str.search(reg) 在str中检索符合规则的字符第一次出现的索引，没有返回-1
        str.replace(reg,newVlaue) 在str中使用newVlaue去替换匹配到的字符
        str.split(reg) 使用reg匹配的字符对str进行分割成数组
        str.match(reg) 使用reg匹配str字符串，返回所有匹配结果的数组
        var str = 'dfg12h=jk33ase345-s97asd';
        var reg = /\d+/g;
        var arr = str.match(reg);
        console.log(arr); // ['12','33','345','97']
*/

</script>
</body>
</html>